//
//  function.c
//  通讯录的实现1.0
//
//  Created by 卜绎皓 on 2022/4/16.
//

#include "function.h"
 
//查找名字函数
int Findbyname(ab* content, char name[])
{
    int i = 0;
    for (i = 0; i < content->sz; i++)
    {
        if (strcmp(name, content->adta[i].name) == 0)
        {
            return i;
        }
    }
    return -1;
}
 
//查联系人信息函数
void information(ab* content, char name[])
{
        printf("请输入联系人姓名->");
        scanf("%s", name);
        int pos = Findbyname(content, name);                            //查找名字函数
        //判断是否有该联系人
        if (pos == -1)
        {
            printf("没有找到该联系人\n");
        }
        else
        {
            //查找到相应联系人，将联系人的信息展示出来
            int i = pos;
            printf("%-7s\t%-10s\t%-10s\t%-15s\t%-15s\n", "姓名", "性别", "年龄", "电话", "住址");
            printf("%-7s\t%-10s\t%-10d\t%-15s\t%-15s\n",
                content->adta[i].name, content->adta[i].sex, content->adta[i].age, content->adta[i].number, content->adta[i].address);
        }
}
 
int_cmp_name(const void* p1, const void* p2)                                            //字符比较函数
{
    return strcmp(((meaaage*)p1)->name, ((meaaage*)p2)->name);
}
 
//初始化通讯录函数
void Iniab(ab* content)
{
    content->sz = 0;
    memset(content->adta, 0, sizeof(content->adta));
    return;
}
 
 
//增加联系人函数
void addcontent(ab* content)
{
    assert(content);
    //在增加联系人之前要判断通讯录是否满了
    if (content->sz == MAX)                                                //通讯录满了
    {
        printf("通讯录满了\n");
        return;
    }
    //通讯录没满
    printf("请输入联系人姓名->");
    scanf("%s", content->adta[content->sz].name);
    printf("请输入联系人性别->");
    scanf("%s",content->adta[content->sz].sex);
    printf("请输入联系人年龄->");
    scanf("%d", &(content->adta[content->sz].age));
    printf("请输入联系人电话->");
    scanf("%s", content->adta[content->sz].number);
    printf("请输入联系人住址->");
    scanf("%s", content->adta[content->sz].address);
    printf("增加联系人成功\n");
    content->sz++;
    return;
}
 
 
//删除联系人函数
void delcontent(ab* content)
{
    char name[MAN_NAME] = {0};
    assert(content);
    printf("请输入要删除的联系人姓名->");
    scanf("%s", name);
    int pos = Findbyname(content, name);                                //查找名字函数
    //在删除联系人之前先判断是否有该要删除的联系人
    if (pos == -1)
    {
        printf("没有找到要删除的联系人\n");
 
    }
    else
    {
        int i = 0;
        for (i = pos; i < content->sz; i++)
        {
            content->adta[i] = content->adta[i + 1];
        }
        content->sz--;
        printf("删除指定联系人成功\n");
    }
    return;
}
 
 
//寻找联系人函数
void seekcontent(ab* content)
{
    assert(content);
    char name[MAN_NAME] = { 0 };
    information(content, name);                                            //查联系人信息函数
    return;
}
 
 
//修改联系人信息函数
void modcontent(ab* content)
{
    assert(content);
    char name[MAN_NAME] = { 0 };
    printf("请输入要修改信息的联系人姓名->");
    scanf("%s", name);
    //int i
    int pos = Findbyname(content, name);                                            //查找名字函数
    printf("请输入修改后的信息\n");
    printf("请输入联系人姓名->");
    scanf("%s", content->adta[pos].name);
    printf("请输入联系人性别->");
    scanf("%s", content->adta[pos].sex);
    printf("请输入联系人年龄->");
    scanf("%d", &(content->adta[pos].age));
    printf("请输入联系人电话->");
    scanf("%s", content->adta[pos].number);
    printf("请输入联系人住址->");
    scanf("%s", content->adta[pos].address);
    printf("修改信息联系人成功\n");
}
 
 
//展示联系人函数
void showcontent(ab* content)
{
    //姓名、性别、年龄、电话、住址
    assert(content);
    int i = 0;
    printf("%-7s\t%-10s\t%-10s\t%-15s\t%-15s\n", "姓名", "性别", "年龄", "电话", "住址");
    for (i = 0; i < content->sz; i++)
    {
        printf("%-7s\t%-10s\t%-10d\t%-15s\t%-15s\n",
            content->adta[i].name, content->adta[i].sex, content->adta[i].age, content->adta[i].number, content->adta[i].address);
    }
    return;
}
 
//清空联系人函数
void emptycontent(ab* content)
{
    assert(content);
    char input = 0;
    printf("请确认是否要清空通讯录(Y/N)->");
    while ((getchar()) != '\n')
    {
        ;
    }
    if ((input = getchar()) == 'Y')
        Iniab(content);                                    //初始化函数——将通讯录全部初始化
    return;
}
 
 
//排序联系人信息函数
void sortcontent(ab* content)
{
    assert(content);
    //用qsort函数快速实现排序
    qsort(content->adta,content->sz,sizeof(content->adta[0]),int_cmp_name);
    int i = 0;
    printf("%-7s\t%-10s\t%-10s\t%-15s\t%-15s\n", "姓名", "性别", "年龄", "电话", "住址");
    for (i = 0; i < content->sz; i++)
    {
        printf("%-7s\t%-10s\t%-10d\t%-15s\t%-15s\n",
            content->adta[i].name, content->adta[i].sex, content->adta[i].age, content->adta[i].number, content->adta[i].address);
    }
    return;
}

